Spiral Matrix

By Nishant surve

Spiral Matrix

Given an m x n matrix, return all elements of the matrix in spiral order. input: [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]

output : [1,2,3,6,9,8,7,4,5]

 #include <bits/stdc++.h>

 using namespace std;

vector<int> printSpiral(vector<vector<int>> mat) {

  // Define ans array to store the result.
vector<int> ans;

 int n = mat.size(); // no. of nows
 int m = mat[0].size(); // no. of columns

// Initialize the pointers reqd for traversal.
int top = 0, left = 0, bottom = n - 1, right = m - 1;

// Loop until all elements are not traversed.
while (top <= bottom && left <= right) {

// For moving left to right
for (int i = left; i <= right; i++)
  ans.push_back(mat[top][i]);

top++;

// For moving top to bottom.
for (int i = top; i <= bottom; i++)
  ans.push_back(mat[i][right]);

right--;

// For moving right to left.
if (top <= bottom) {
  for (int i = right; i >= left; i--)
   ans.push_back(mat[bottom][i]);

  bottom--;
}

// For moving bottom to top.
if (left <= right) {
  for (int i = bottom; i >= top; i--)
    ans.push_back(mat[i][left]);

  left++;
  }

   }
   return ans;
 }

 int main() {


vector<vector<int>> mat {{1, 2, 3, 4},
                         {5, 6, 7, 8},
                         {9, 10, 11, 12},
	                     {13, 14, 15, 16}};

 vector<int> ans = printSpiral(mat);

 for(int i = 0;i<ans.size();i++){

  cout<<ans[i]<<" ";

 }

cout<<endl;

return 0;
}